#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


//char* my_strcpy(char* p)
//{
//
//	char* tem = p;
//	char* s = tem;
//	while (*p)
//	{
//		*tem++ = *p++;
//	}
//	*tem = '\0';
//	return s;
//
//}error


//
//int main()
//{
//	/*char* p[] = { "FGTUY","HYGFYUF","GFTRDE" };
//	char** pp[] = { p + 2,p + 1,p };
//	char*** ppp = pp;
//	printf("%s\n", *pp+1);*/
//	char* str= "hduiaudf";
//	char* s = my_strcpy(str);
//	printf("%s", s);
//
//	return 0;
//}


int cmp_int(void* p1,void* p2)
{
	return *(int*)p1 - *(int*)p2;
}


void swap(char* p1, char* p2,size_t with)
{
	for (int i = 0; i < with; i++)
	{
		char tem = *p1;
		*p1 = *p2;
		*p2 = tem;
		p1++;
		p2++;
	}
}



void my_qsort(void* base, size_t num, size_t with, int (*cmp)(void* p1,void* p2))
{
	for (int i = 0; i < num - 1; i++)
	{
		for (int j = 0; j < num - i - 1; j++)
		{
			if (cmp((char*)base+j*with,(char*)base+(j+1)*with)>0)
			{
				swap((char*)base + j * with, (char*)base + (j + 1) * with,with);
			}




		}
	}





}



void print(int* a,size_t num)
{
	for (int i = 0; i < num; i++)
	{
		printf("%d ", a[i]);
	}


}




int main()
{
	int a[9] = { 2,35,67,97,42,11,6,3,2 };
	my_qsort(a, 9, 4, cmp_int);
	print(a,9);

	return 0;
}